package com.itheima.reggie.common;

import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.scripting.bsh.BshScriptUtils;
import org.springframework.stereotype.Component;

import java.time.LocalDateTime;

/**
 * @author ：石破天
 * @date ：Created in 2022年12月20日
 * @description ：
 *      MetaObjectHandler mybatisplus 定义的一个规范
 *           规范了 自动填充的 功能
 *           实现了规范 那么就代表着可以进行自动填充了
 * @version: 1.0
 */
@Component // 需要被发现
@Slf4j
public class MyMetaObjectHandler implements MetaObjectHandler {


    // 做 添加操作的时候   你写 哪些字段 需要被填充
        //  怎么填充写到这里
    @Override
    public void insertFill(MetaObject metaObject) {
        log.info("添加的时候 会触发 添加的公共字段自动填充");
            // 有四个字段要填充
        // 怎么填充呢 说白了给那四个字段的值
        metaObject.setValue("createTime", LocalDateTime.now());
        metaObject.setValue("updateTime",LocalDateTime.now());
        Long empId = BaseContext.getCurrentId();
        //用户id  暂时先写1   应该填充的是登录人的id
        metaObject.setValue("createUser",empId);// 1l
        metaObject.setValue("updateUser",empId);// 1L
    }
    // 做 修改操作的时候   你写 哪些字段 需要被填充
    //  怎么填充写到这里
    @Override
    public void updateFill(MetaObject metaObject) {
        log.info("修改的的时候 会触发 修改的公共字段自动填充");
        System.out.println("修改填充策略,当前线程id:"+Thread.currentThread().getId());

        // 有两个字段要填充
        metaObject.setValue("updateTime",LocalDateTime.now());

        //这里怎么获取session对象！！！request  session

        // 从 ThreadLocal对象中取出来
//        Long empId = BaseContext.getThreadLocal().get();
        Long empId = BaseContext.getCurrentId();
        //用户id  暂时先写1
        // 应该填充的是登录人的id
        metaObject.setValue("updateUser",empId);
    }
}
